package com.jie.server.mvc.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.jie.server.mvc.model.entity.Group;
import com.baomidou.mybatisplus.extension.service.IService;
import com.jie.server.mvc.model.entity.User;
import com.jie.server.mvc.model.vo.GroupQueryVo;
import com.jie.server.mvc.model.vo.GroupUpdateVo;

import java.util.List;

/**
 * <p>
 * 群表 服务类
 * </p>
 *
 * @author XieZhiJie
 * @since 2022-04-24
 */
public interface GroupService extends IService<Group> {

    /**
     * 建群
     * @param userId 建群人的id
     * @param group  群信息
     * @return       返回是否创建成功
     */
    boolean build(int userId, Group group);

    /**
     * 分页获取群信息
     * @param groupQueryVo 查询条件
     * @return             返回查询到的数据
     */
    Page<Group> getList(GroupQueryVo groupQueryVo);

    /**
     * 根据用户id和查询条件查出这个用户的群信息
     * @param userId       用户id
     * @param groupQueryVo 查询条件
     * @return             返回查询到的数据
     */
    Page<Group> getUserList(int userId, GroupQueryVo groupQueryVo);

    /**
     * 修改群名信息
     * @param userId        用户id
     * @param groupUpdateVo 要修改的信息
     * @return              返回是否修改成功
     */
    boolean updateGroupName(Integer userId, GroupUpdateVo groupUpdateVo);

    /**
     * 加入群聊
     * @param userId  用户id
     * @param groupId 要加入的群id
     * @return        返回是否加入成功
     */
    boolean joinGroup(Integer userId, Integer groupId);

    /**
     * 退出群
     * @param userId  要退出群的用户id
     * @param groupId 群id
     * @return        返回是否退出成功
     */
    boolean signOutGroup(Integer userId, Integer groupId);

    /**
     * 根据群id获取该群的用户信息
     * @param groupId 群id
     * @return        返回该群的用户信息列表
     */
    List<User> getGroupUserList(Integer groupId);

}
